//ListView
//ListView({
//Key key,
//Axis scrollDirection: Axis.vertical,//滚动方向
//bool reverse: false,//十分反向显示数据
//ScrollController controller,
//bool primary,
//ScrollPhysics physics,//物理滚动
//bool shrinkWrap: false,
//EdgeInsetsGeometry padding,
//this.itemExtent,//item有效范围
//bool addAutomaticKeepAlives: true,//自动保存视图缓存
//bool addRepaintBoundaries: true,//添加重绘边界
//List<Widget> children: const <Widget>[],
//})

import 'package:flutter/material.dart';
import 'package:flutter_practice/utils/Utils.dart';

class MyListViewDemo extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
    // TODO: implement build
    return Scaffold(
      appBar: Utils.getAppBar('listView'),
      body: ListView(
        children: <Widget>[
          ListTile(
            leading: Icon(Icons.android),
            title: Text('123'),
          ),
          ListTile(
            leading: Icon(Icons.android),
            title: Text('123'),
          ),
          ListTile(
            leading: Icon(Icons.android),
            title: Text('123'),
          ),
          ListTile(
            leading: Icon(Icons.android),
            title: Text('123'),
          ),
          ListTile(
            leading: Icon(Icons.android),
            title: Text('123'),
          ),
          ListTile(
            leading: Icon(Icons.android),
            title: Text('123'),
          ),
          ListTile(
            leading: Icon(Icons.android),
            title: Text('123'),
          ),
        ],
      ),
    );
  }
}

//在Flutter中有三种构建ListView的方式，刚才介绍的是最简单的一种，但是却不是最常用的，
// 因为它仅仅适用于已知数量或者较少数量的Item的情况。如果有未知数量或者无限个Item的情况，
// 再使用上述的方法将不再适用。
//那么，我们可以尝试下ListView.builder（）和ListView.custom（）。
//ListView.builder（）和ListView.custom（）的用法基本相同，
// 只不过custom可以根据自己的需要控制Item显示方式，如Item显示大小。

//ListView.builder()
//ListView.builder({
//Key key,
//Axis scrollDirection: Axis.vertical,
//bool reverse: false,
//ScrollController controller,
//bool primary,
//ScrollPhysics physics,
//bool shrinkWrap: false,
//EdgeInsetsGeometry padding,
//this.itemExtent,
//@required IndexedWidgetBuilder itemBuilder,//item构建者
//int itemCount,//item数量
//bool addAutomaticKeepAlives: true,
//bool addRepaintBoundaries: true,
//})

class MyListViewBuildDemo extends StatefulWidget {
  @override
  State<StatefulWidget> createState() {
    // TODO: implement createState
    return new MyListViewBuildState();
  }
}

class MyListViewBuildState extends State<MyListViewBuildDemo> {
  final List<ListItem> dataList = [];

  @override
  void initState() {
    // TODO: implement initState
    super.initState();
    for (int i = 0; i < 20; i++) {
      dataList.add(new ListItem('标题$i', Icons.android));
    }
  }

  @override
  Widget build(BuildContext context) {
    // TODO: implement build
    return Scaffold(
      appBar: Utils.getAppBar('listBuilder'),
      body: Center(
        child: ListView.builder(
          itemBuilder: (BuildContext context, int dex) {
            return new ListItemWidget(dataList[dex]);
          },
          itemCount: dataList.length,
        ),
      ),
    );
  }
}

//构建数据 对象
class ListItem {
  final String title;
  final IconData iconData;

  ListItem(this.title, this.iconData);
}

//构建每条数据对应的 ui
class ListItemWidget extends StatelessWidget {
  final ListItem listItem;

  ListItemWidget(this.listItem);

  @override
  Widget build(BuildContext context) {
    // TODO: implement build
    return ListTile(
      leading: Icon(listItem.iconData),
      title: Text(listItem.title),
    );
  }
}
